第 1 步 - 创建状态机控制应用程序状态

在本教程的这一步骤中,您创建状态机控制切换按钮,该按钮可打开/关闭显示身体、腿部和挡风玻璃的空调指示灯。您将创建设置指示灯何时可见的状态组和状态。您还将创建用于控制空调档位指示灯的属性类型。

教程资产

<KanziWorkspace>/Tutorials/State managers/Completed 目录包含本教程已完成的 Kanzi Studio 工程。

本教程的起点资料是存储在 <KanziWorkspace>/Tutorials/State managers/Assets 目录中的 State managers.kzproj Kanzi Studio 工程。该工程包含完成本教程所需的节点:

为空调状态创建状态机

您可以使用状态机在应用程序中创建不同的状态。例如,您可以定义不同状态下按钮的外观和行为,例如当用户按下开按钮时,按钮如何反应。
在本节中,您将在应用程序中创建状态机和状态组,以控制空调指示灯的状态。使用状态机设置每个切换按钮中的图像何时可见。

要创建状态机:

  1. 在 Kanzi Studio 中打开存储在 <KanziWorkspace>/Tutorials/State managers/Assets 目录中的 State managers.kzproj 工程。
  2. 在素材库 (Library) 按下 Alt 并右键点击状态机 (State Managers) 中,选择状态机 (State Manager) 以创建状态机,并将其命名为 AC Controls。

  3. 在素材库 (Library) > 状态机 (State Managers) > AC Controls 中,选择状态组 (State Group),按下 F2 并将其重命名为 Indicators,将这两个状态重命名为 On 和 Off。
    状态组包含各种状态,定义控制器属性和状态组中状态之间的迁移。使用Indicators 状态组设置身体、腿部和挡风玻璃指示灯图像何时可见。
  4. 在素材库 (Library) > 状态机 (State Managers) > AC Controls 中选择 Indicators 状态组并在属性 (Properties) 中设置:
  5. 在素材库 (Library) > 状态机 (State Managers) > AC Controls > Indicators 中选择On 状态并在属性 (Properties) 中将切换状态 (Toggle State) 属性设置为 1。
    切换状态 (Toggle State) 属性在Off 状态默认设置为 0。
  6. 在On 状态按下 Alt 并右键点击,选择状态对象 (State Object) 以创建 状态对象 (State Object),将其命名为 IndicatorVisible,并在属性 (Properties) 中:

    状态对象定义特定状态的节点属性。在工程 (Project) 中,Body、Legs 和 Shield 节点各包含一张名为图像 (Image) 的图像。目标对象路径 (Target Object Path) 指向所有这些图像,并将其设置为可见。

  7. 为Off 状态重复上一步骤,但将状态对象命名为 IndicatorInvisible,确保可见性 (Visible) 属性被禁用。
  8. 在工程 (Project) 中选择 Legs、Body 和 Shield 节点,在属性 (Properties) 中添加状态机 (State Manager) 属性,并将其设置为 AC Controls。
    通过设置状态机 (State Manager) 属性值,您可以设置状态机以控制所选节点及其子树。这种情况下,设置 AC Controls 状态机,以控制设置空调状态的指示灯按钮。

定义档位按钮的状态

在本节中,您将学习创建属性类型,将其用于档位按钮的触发器中,来设置档位指示灯的状态。在AC Controls 状态机中创建另一个状态组。该状态组控制显示当前空调档位的指示灯。

要定义档位按钮的状态:

  1. 在素材库 (Library) > 属性类型 (Property Types) 中按下 Alt 并右键点击以创建属性类型,并在属性类型编辑器 (Property Type Editor) 中设置:

    点击保存 (Save)。

  2. 在素材库 (Library) > 状态机 (State Managers)中按下 Alt 并右键点击AC Controls状态机,选择 状态组 (State Group) 并将其命名为 Level。
    使用 Level 状态组控制当用户点击档位按钮时哪些档位指示灯可见。

  3. 在素材库 (Library) > 状态机 (State Managers) > AC Controls 中选择 Level 状态组,并在属性 (Properties) 中将控制器属性 (Controller Property) 设置为Statemanagers.Level。
  4. 在 Level 状态组创建状态,并将其命名为 1,设置当应用程序处于该状态时哪些指示灯可见:
    1. 选择Level > 1 状态并在属性 (Properties) 中将控制器属性 (Controller Property) 设置为Level 1。
    2. 在Level > 1 状态为三张用于指示空调档位的图像各创建一个 状态对象 (State Object):
      • AC Active Level 2
      • AC Active Level 3
      • AC Active Level 4

      1 档 (Level 1) 无需状态机中的状态对象 (State Object),因为当用户打开空调时使用图像将第一个指示条显示为绿色。

    3. 对于属性 (Properties) 中的每个状态对象 (State Object),将目标对象路径 (Target Object Path) 设置为指向工程 (Project) > AirCondition level > Level buttons 中的正确图像:
      • 对于 AC Active Level 2,将目标对象路径 (Target Object Path) 设置为Level 2/AC Active Level 2 节点
      • 对于 AC Active Level 3,将目标对象路径 (Target Object Path) 设置为Level 3/AC Active Level 3 节点
      • 对于 AC Active Level 4,将目标对象路径 (Target Object Path) 设置为Level 4/AC Active Level 4 节点
    4. 对于每个状态对象 (State Object) 添加可见性 (Visible) 属性,并确保已禁用。
      当应用程序处于 1 状态,档位指示灯不可见。
  5. 在 Level 状态组中选择 1 状态,按下 Ctrl D 三次以复制该状态,并将这三个状态命名为 2、3 和 4。
  6. 选择在上一步骤中创建的每个新状态,在属性 (Properties) 中设置 控制器属性 (Controller Property):
  7. 设置在各状态下哪些档位按钮可见:
  8. 在工程 (Project) 中选择 AirCondition level > Level buttons,在属性 (Properties) 中添加状态机 (State Manager),并将其设置为 AC Controls。
    您可以设置状态机以控制所选节点及其子树。这种情况下,设置 AC Controls 状态机,以控制设置空调档位的指示灯按钮。
  9. 为档位按钮创建触发器,以打开/关闭指示灯:
    1. 在工程 (Project) 中选择 Level 1 按钮,在节点组件 (Node Components) 部分的按钮: 点击 (Button:Click) 触发器中点击添加 (Add)下拉菜单,选择设置属性 (Set Property) 动作,然后设置:
      • 目标项 (Target Item) 为 <Relative> ..
      • 目标属性 (Target Property) 为Statemanagers.Level
      • 目标属性特性 (Target Property Attribute) 为整体属性 (Whole property)
      • 起始值 (Value From) 为固定值 (Fixed Value)
      • 固定值 (Fixed Value) 为Level 1
      使用设置属性 (Set Property) 动作设置当 Statemanagers.Level 属性值更改时应用程序的状态。
    2. 在节点组件 (Node Components) 中右键点击按钮: 点击 (Button:Click) 触发器并选择复制 (Copy)。
    3. 在工程 (Project) 中粘贴触发器到 Level 2、Level 3 和Level 4 节点,但在设置属性 (Set Property) 动作中将固定值 (Fixed Value) 设置为 Level 2、Level 3 和 Level 4。

< 简介
下一步 >

另请参阅

状态机

使用状态机

使用状态迁移

创建属性类型